package com.platform.core.service;

import com.platform.comm.service.CommonBiz;
import com.platform.core.entity.SysRoleFunction;
import com.platform.dto.FunctionQo;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.util.MultiValueMap;

import java.util.Collections;
import java.util.List;
import java.util.Set;

/**
 * Description: 角色菜单-Service接口
 *
 * @author libin Created on 2019/7/22
 **/
public interface SysRoleFunctionService extends CommonBiz<SysRoleFunction, String> {

    /**
     * 创建
     * @param roleId 角色Id
     * @param funId 菜单
     */
    default void createRelated(String roleId, String funId) {
        createRelated(roleId, Collections.singletonList(funId));
    }

    /**
     * 创建
     * @param roleId 角色Id
     * @param funIds 菜单Id
     */
    void createRelated(String roleId, List<String> funIds);

    /**
     * 创建
     * @param roleId 角色Id
     * @param funId 菜单
     */
    default void removeRelated(String roleId, String funId) {
        removeRelated(roleId, Collections.singletonList(funId));
    }

    /**
     * 创建
     * @param roleId 角色Id
     * @param funIds 菜单Id
     */
    void removeRelated(String roleId, List<String> funIds);

    /**
     * 删除权限
     *
     * @param roleId 角色ID
     */
    void removeByRoleId(String roleId);

    /**
     * 根据菜单Id删除
     *
     * @param funId 菜单id
     */
    void removeByFuncId(String funId);

    /**
     * 普通角色权限
     *
     * @param roleIds 角色Id
     * @return 功能菜单
     */
    Set<FunctionQo> findFunctionByRole(List<String> roleIds);

    /**
     * 查询管理员权限
     *
     * @return 获取菜单
     */
    Set<FunctionQo> findFunctionByAdmin();

    /**
     * 分页查询菜单
     * @param pageable 分页参数
     * @param parameters 查询参数
     * @return Page
     */
    Page<FunctionQo> queryFunctions(Pageable pageable, MultiValueMap<String, String> parameters);

    /**
     * 授权
     * @param roleId 角色ID
     * @param funIds 菜单列表
     */
    void createOrRemoveRelated(String roleId, List<String> funIds);

    /**
     * 根据角色ID查询菜单
     * @param roleId 角色ID
     *
     * @return 菜单列表
     */
    List<String> findFunctionsByRole(String roleId);
}
